package pruebas.jframe;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import org.math.plot.Plot2DPanel;




public class EjemploFormularioBien extends JFrame {

	private JPanel contentPane;
	private JTextField textFieldPoblacion;
	private JTextField textFieldGeneraciones;
	private JTextField textFieldProbCruce;
	private JTextField textFieldProbMutacion;
	private JTextField textFieldPrecision;
	private JComboBox comboBoxSeleccion;
	private JComboBox comboBoxMutacion;
	//private JComboBox comboBoxCruce;
	private JCheckBox checkboxElite;
	private JCheckBox checkboxPermitidoIF;
	private JTextArea solucion;


	public EjemploFormularioBien() {

		setTitle("Programación Evolutiva Practica 3 2012-13");
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//setBounds(100, 100, 900, 600);
		setBounds(500, 300, 1500, 600);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);



		JLabel lblPoblacion = new JLabel("Poblacion");
		lblPoblacion.setBounds(50, 50, 108, 14);
		contentPane.add(lblPoblacion);

		JLabel lblGeneraciones = new JLabel("Generaciones");
		lblGeneraciones.setBounds(50, 25, 108, 14);
		contentPane.add(lblGeneraciones);

		JLabel lblProbCruce = new JLabel("Prob. Cruce");
		//lblProbCruce.setBounds(50, 75, 108, 14);
		contentPane.add(lblProbCruce);

		JLabel lblProbMutacion = new JLabel("Prob. Mutacion");
		//lblProbMutacion.setBounds(50, 100, 108, 14);
		contentPane.add(lblProbMutacion);


		JLabel lblSeleccion = new JLabel("Seleccion");
		lblSeleccion.setBounds(50, 125, 108, 14);
		contentPane.add(lblSeleccion);

		JLabel lblMutacion = new JLabel("Mutacion");
		lblMutacion.setBounds(50, 150, 108, 14);
		contentPane.add(lblMutacion);

		JLabel lblElite = new JLabel("Elite");
		lblElite.setBounds(50, 175, 108, 14);
		contentPane.add(lblElite);

		JLabel lblIF = new JLabel("IF");
		lblIF.setBounds(50, 200, 108, 14);
		contentPane.add(lblIF);

		textFieldPoblacion = new JTextField();
		textFieldPoblacion.setText("100");
		textFieldPoblacion.setBounds(168, 50, 135, 20);
		contentPane.add(textFieldPoblacion);
		textFieldPoblacion.setColumns(10);

		textFieldGeneraciones = new JTextField();
		textFieldGeneraciones.setText("100");
		textFieldGeneraciones.setBounds(168, 25, 135, 20);
		contentPane.add(textFieldGeneraciones);
		textFieldGeneraciones.setColumns(10);

		textFieldProbCruce = new JTextField();
		textFieldProbCruce.setText("0.6");
		textFieldProbCruce.setBounds(168, 75, 135, 20);
		contentPane.add(textFieldProbCruce);
		textFieldProbCruce.setColumns(10);

		textFieldProbMutacion = new JTextField();
		textFieldProbMutacion.setText("0.1");
		textFieldProbMutacion.setBounds(168, 100, 135, 20);
		contentPane.add(textFieldProbMutacion);
		textFieldProbMutacion.setColumns(10);

		checkboxElite = new JCheckBox();
		checkboxElite.setBounds(168, 175, 135, 20);
		contentPane.add(checkboxElite);

		checkboxPermitidoIF = new JCheckBox();
		checkboxPermitidoIF.setBounds(168, 200, 135, 20);
		contentPane.add(checkboxPermitidoIF);



		comboBoxSeleccion = new JComboBox();
		comboBoxSeleccion.setModel(new DefaultComboBoxModel(new String[] {"Ruleta", "Torneo"}));
		comboBoxSeleccion.setBounds(168,125, 135, 20);
		contentPane.add(comboBoxSeleccion);

		comboBoxMutacion = new JComboBox();
		comboBoxMutacion.setModel(new DefaultComboBoxModel(new String[] {"Mutacion Terminal", "Mutacion Arbol",
		"Mutacion Permutacion"}));
		comboBoxMutacion.setBounds(168, 150, 135, 20);
		contentPane.add(comboBoxMutacion);
		
		
		solucion = new JTextArea("Solucion");
		solucion.setBounds(50, 260, 240, 300);
		solucion.setLineWrap(true);
		solucion.setWrapStyleWord(true);
		contentPane.add(solucion);
		
		//JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
		//solucion = new javax.swing.JTextArea();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

		/*jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

		solucion.setColumns(20);
		solucion.setRows(5);
		jScrollPane1.setViewportView(solucion);
		jScrollPane1.setBounds(50, 260, 240, 200);
		contentPane.add(jScrollPane1);
		*/
		
	

		JButton btnEjecutar = new JButton("Ejecutar");
		
		btnEjecutar.addMouseListener(new MouseAdapter() {

			public void mouseClicked(MouseEvent arg0) {
				//Coger los datos de entrada
				int poblacion = Integer.parseInt(textFieldPoblacion.getText());
				int generaciones = Integer.parseInt(textFieldGeneraciones.getText());
				double probCruce = Double.parseDouble(textFieldProbCruce.getText());
				double probMutacion = Double.parseDouble(textFieldProbMutacion.getText());
				String seleccion = String.valueOf(comboBoxSeleccion.getSelectedItem());
				String mutacion = String.valueOf(comboBoxMutacion.getSelectedItem());
				boolean elite = checkboxElite.isSelected();
				boolean permitidoIF = checkboxPermitidoIF.isSelected();

				long tiempoInicio = System.currentTimeMillis();
				//AGenetico ag = new AGenetico(poblacion, generaciones, probCruce, probMutacion, seleccion, mutacion, elite, permitidoIF);
				//ag.Algoritmo_Genetico();
				long totalTiempo = System.currentTimeMillis() - tiempoInicio;

				// define your data
				double[] x = new double[generaciones];
				for (int i=0;i<generaciones;i++){
					x[i]=i;
				}
				// create your PlotPanel (you can use it as a JPanel)
				Plot2DPanel plot = new Plot2DPanel();
				// define the legend position
				//add a line plot to the PlotPanel
				/*plot.addLinePlot("Mejor Absoluto", x, ag.getMejorAbs());
				plot.addLinePlot("Mejor de la generacion", x, ag.getMejorGeneracion());
				plot.addLinePlot("Media de la generacion", x, ag.getMediaGeneracion());*/

				totalTiempo = System.currentTimeMillis() - tiempoInicio;
				System.out.println("Tiempo = " +(totalTiempo*0.001) + " seg\n");

				//añadimos plot
				plot.setBounds(350, 20, 525, 525);
				contentPane.add(plot);

				//String textoSolucion = "Aptitud Mejor: "+ ag.elMejor.aptitud;
				//preparamos la solucion y la añadidos			
				//ArrayList <CromosomaProblemaConcreto> mejores = ag.getMejores();
				String losMejores;
				/*
				for (int i =0; i< mejores.size();i++){
					mejores.get(i).setTexto(mejores.get(i).arbol);
					textoSolucion = textoSolucion + "\n Generacion : "  + i +"\n" + mejores.get(i).arbol.textoArbol  + "\n";;
				}
				*/
				//ag.elMejor.setTexto(ag.elMejor.arbol);
				//textoSolucion = textoSolucion + "\n"+ ag.elMejor.arbol.textoArbol;
				//solucion.setText(textoSolucion);

				contentPane.repaint();

			}
		});
		btnEjecutar.setBounds(168, 225, 100, 23);
		contentPane.add(btnEjecutar);
		setVisible(true);
		setResizable(true);
	}
	
	public static void main(String args[]){
		EjemploFormularioBien efb = new EjemploFormularioBien();
	}

}

